gtk3-demo: Make the filter model example more interesting
authorMatthias Clasen <mclasen@redhat.com>
Mon, 20 Jun 2016 03:54:07 +0000 (23:54 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 20 Jun 2016 03:54:07 +0000 (23:54 -0400)
Allow editing values in the first treeview, to see the derived
models update in real time.

demos/gtk-demo/filtermodel.c
demos/gtk-demo/filtermodel.ui

index bca6674fa6af3c0e2de8237c3cfafa07611ee342..bb8ed45920e17d69faa96c680b13f248305f5550 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <gtk/gtk.h>
+#include <stdlib.h>
 
 enum {
   WIDTH_COLUMN,
@@ -83,6 +84,28 @@ visible_func (GtkTreeModel *model,
   return width < 10;
 }
 
+static void
+cell_edited (GtkCellRendererSpin *cell,
+             const char          *path_string,
+             const char          *new_text,
+             GtkListStore        *store)
+{
+  int val;
+  GtkTreePath *path;
+  GtkTreeIter iter;
+  int column;
+
+  path = gtk_tree_path_new_from_string (path_string);
+  gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
+  gtk_tree_path_free (path);
+
+  column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column"));
+
+  val = atoi (new_text);
+
+  gtk_list_store_set (store, &iter, column, val, -1);
+}
+
 GtkWidget *
 do_filtermodel (GtkWidget *do_widget)
 {
@@ -106,15 +129,21 @@ do_filtermodel (GtkWidget *do_widget)
       g_signal_connect (window, "destroy",
                         G_CALLBACK (gtk_widget_destroyed), &window);
 
+      store = (GtkListStore*)gtk_builder_get_object (builder, "liststore1");
+
       column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn1");
       cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext1");
       gtk_tree_view_column_set_cell_data_func (column, cell,
                                                format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL);
+      g_object_set_data (G_OBJECT (cell), "column", GINT_TO_POINTER (WIDTH_COLUMN));
+      g_signal_connect (cell, "edited", G_CALLBACK (cell_edited), store);
 
       column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn2");
       cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext2");
       gtk_tree_view_column_set_cell_data_func (column, cell,
                                                format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL);
+      g_object_set_data (G_OBJECT (cell), "column", GINT_TO_POINTER (HEIGHT_COLUMN));
+      g_signal_connect (cell, "edited", G_CALLBACK (cell_edited), store);
 
       column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn3");
       cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext3");
@@ -135,7 +164,6 @@ do_filtermodel (GtkWidget *do_widget)
       cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrendererpixbuf1");
       gtk_tree_view_column_add_attribute (column, cell, "visible", SQUARE_COLUMN);
 
-      store = (GtkListStore*)gtk_builder_get_object (builder, "liststore1");
       tree = (GtkWidget*)gtk_builder_get_object (builder, "treeview2");
 
       types[WIDTH_COLUMN] = G_TYPE_INT;
index 2b6c57100428b886488b7c5db90a81cea261b3b3..3b39095bd6e28b0f798e590ff34a8a6336f25a9b 100644 (file)
       </row>
     </data>
   </object>
+  <object class="GtkAdjustment" id="adj">
+    <property name="lower">5</property>
+    <property name="upper">50</property>
+    <property name="step-increment">1</property>
+    <property name="page-increment">5</property>
+  </object>
   <object class="GtkWindow" id="window1">
     <property name="title" translatable="yes">Filter Model</property>
     <child>
               <object class="GtkTreeViewColumn" id="treeviewcolumn1">
                 <property name="title" translatable="yes">Width</property>
                 <child>
-                  <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                  <object class="GtkCellRendererSpin" id="cellrenderertext1">
+                    <property name="editable">1</property>
+                    <property name="adjustment">adj</property>
+                  </object>
                 </child>
               </object>
             </child>
               <object class="GtkTreeViewColumn" id="treeviewcolumn2">
                 <property name="title" translatable="yes">Height</property>
                 <child>
-                  <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                  <object class="GtkCellRendererSpin" id="cellrenderertext2">
+                    <property name="editable">1</property>
+                    <property name="adjustment">adj</property>
+                  </object>
                 </child>
               </object>
             </child>